package interfaces

type DriverIntefacer[T any] interface {
	/*
	 *  Connect
	 * @Description: 连接 && 初始化队列驱动
	 * @return error
	 */
	Connect() error

	/*
	 *  SetValue
	 * @Description: 给队列服务提供者对象赋值
	 * @param Key 队列标识
	 * @param TaskName 任务名称
	 * @param Params 参数
	 * @param RetryTimes 重试次数
	 * @param RetryedTimes 已经重试次数
	 * @param PullKeys 拉取消息队列标识
	 * @param PullTimeOut 拉取消息超时时间
	 * @param Delays 延时队列延时时间
	 * @param State 队列确认，队列逻辑执行结果。success、failed
	 */
	SetValue(Key string, TaskName string, Params string, RetryTimes int64, RetryedTimes int64,
		PullKeys string, PullTimeOut int64, Delays int64, State string) DriverIntefacer[T]

	/*
	 *  Push
	 * @Description: 推送任务到 queue 服务提供者（可以是redis <目前系统支持>、rabbitMq、kafka 。。。）
	 * @return error
	 */
	Push() error

	/*
	 *  PushDelay
	 * @Description: 延迟推送任务到 queue 服务提供者（可以是redis <目前系统支持>、rabbitMq、kafka 。。。）
	 * @param delays 延迟推送的时间，单位秒，redis 队列不支持延时推送
	 * @return error
	 */
	PushDelay(delays int64) error

	/**
	 *  Pull
	 *  @Description: 从队列服务提供者拉取消息
	 *  @param queueNmae 队列名称，如果是多个队列名称，用英文逗号隔开
	 *  @param timeOut 过期时间
	 *  @return string 拉取到的消息（json 字符串）
	 */
	Pull() (*T, error)

	/**
	 *  DeleteTask
	 *  @Description: 删除任务
	 *  @param queueNmae 队列名称
	 *  @param taskName 任务名称
	 *  @return bool 返回值，任务删除成功返回 true
	 */
	DeleteTask() error

	/*
	 *  Comfirm
	 * @Description: 队列任务处理确认
	 * @param queueName 队列名称
	 * @param state 任务执行结果。success、failed
	 */
	Comfirm() error

	/**
	 *  Info
	 *  @Description: 获取队列服务的相关信息（目前支支持获取各个队列的任务数量）
	 *  @param queueName 队列名称
	 *  @return map[string]int64 队列名称 => 任务数量
	 */
	Info() (map[string]int64, error)
}
